<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<title>NullsPermittedRule</title>
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="NullsPermittedRule";
    }
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!--   -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../mmj/verify/NotationRule.html" title="class in mmj.verify"><span class="strong">Prev Class</span></a></li>
<li><a href="../../mmj/verify/ProofConstants.html" title="class in mmj.verify"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?mmj/verify/NullsPermittedRule.html" target="_top">Frames</a></li>
<li><a href="NullsPermittedRule.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#fields_inherited_from_class_mmj.verify.GrammarRule">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">mmj.verify</div>
<h2 title="Class NullsPermittedRule" class="title">Class NullsPermittedRule</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li><a href="../../mmj/verify/GrammarRule.html" title="class in mmj.verify">mmj.verify.GrammarRule</a></li>
<li>
<ul class="inheritance">
<li>mmj.verify.NullsPermittedRule</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="strong">NullsPermittedRule</span>
extends <a href="../../mmj/verify/GrammarRule.html" title="class in mmj.verify">GrammarRule</a></pre>
<div class="block">A Nulls Permitted Rule is a Grammar Rules that says that a certain type of
 grammatical expression may be null, (may have zero-length symbol sequences).
 <p>
 In Metamath terms, a Nulls Permitted Rule can be derived from a <code>$a</code>
 statement whose Formula has length equal to 1.
 <p>
 For example: <code>wffNullOK $a wff $.</code> states that wff-type variables and
 expressions may be empty or "null".
 <p>
 Nulls Permitted Rules can also be derived from other Grammar Rules, including
 Type Conversion Rules and Notation Rules. Things get complicated very quickly
 when using Nulls! Look at this example:
 <p>
 <ol>
 <li><code>$c NUMBER INTEGER $.</code>
 <li><code>$v x y z i j k $.</code>
 <li><code>NX $f NUMBER x $.</code>
 <li><code>Ii $f INTEGER i $.</code>
 <li><code>NullOkINTEGER $a INTEGER $.</code>
 <li><code>ConvINTEGER $a NUMBER i $.</code>
 </ol>
 <p>
 What that says is that we have two grammatical Type Codes, "NUMBER" and
 "INTEGER", with NUMBER variables x, y, z and INTEGER variables i, j, and k.
 And it says that INTEGER has Nulls Permitted, and that every INTEGER is a
 NUMBER. But it implies -- generates -- NUMBER has Nulls Permitted also! A
 Nulls Permitted Rule is derived from Type Conversion statement "ConvInteger"
 using statement "NullOkINTEGER".
 <p>
 Similar derivations occur with Notation Rules when Nulls and Type Conversions
 are involved. Very tricky stuff!</div>
<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../CreatingGrammarRulesFromSyntaxAxioms.html">
      CreatingGrammarRulesFromSyntaxAxioms.html</a>, 
<a href="../../ConsolidatedListOfGrammarValidations.html">
      ConsolidatedListOfGrammarValidations.html</a>, 
<a href="../../BasicsOfSyntaxAxiomsAndTypes.html">
      BasicsOfSyntaxAxiomsAndTypes.html</a>, 
<a href="../../MetamathERNotes.html"> Nomenclature and
      Entity-Relationship Notes</a></dd></dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field_summary">
<!--   -->
</a>
<h3>Field Summary</h3>
<ul class="blockList">
<li class="blockList"><a name="fields_inherited_from_class_mmj.verify.GrammarRule">
<!--   -->
</a>
<h3>Fields inherited from class&nbsp;mmj.verify.<a href="../../mmj/verify/GrammarRule.html" title="class in mmj.verify">GrammarRule</a></h3>
<code><a href="../../mmj/verify/GrammarRule.html#isBaseRule">isBaseRule</a>, <a href="../../mmj/verify/GrammarRule.html#MAX_SEQ_NBR">MAX_SEQ_NBR</a>, <a href="../../mmj/verify/GrammarRule.html#maxSeqNbr">maxSeqNbr</a>, <a href="../../mmj/verify/GrammarRule.html#nbrHypParamsUsed">nbrHypParamsUsed</a>, <a href="../../mmj/verify/GrammarRule.html#paramTransformationTree">paramTransformationTree</a>, <a href="../../mmj/verify/GrammarRule.html#paramVarHypNode">paramVarHypNode</a>, <a href="../../mmj/verify/GrammarRule.html#RULE_NBR">RULE_NBR</a>, <a href="../../mmj/verify/GrammarRule.html#ruleFormatExpr">ruleFormatExpr</a>, <a href="../../mmj/verify/GrammarRule.html#ruleHypPos">ruleHypPos</a>, <a href="../../mmj/verify/GrammarRule.html#ruleNbr">ruleNbr</a></code></li>
</ul>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_summary">
<!--   -->
</a>
<h3>Constructor Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><strong><a href="../../mmj/verify/NullsPermittedRule.html#NullsPermittedRule()">NullsPermittedRule</a></strong>()</code>
<div class="block">Default constructor.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><strong><a href="../../mmj/verify/NullsPermittedRule.html#NullsPermittedRule(mmj.verify.Grammar, mmj.lang.Axiom)">NullsPermittedRule</a></strong>(<a href="../../mmj/verify/Grammar.html" title="class in mmj.verify">Grammar</a>&nbsp;grammar,
                  <a href="../../mmj/lang/Axiom.html" title="class in mmj.lang">Axiom</a>&nbsp;baseSyntaxAxiom)</code>
<div class="block">Constructor -- default GrammarRule for base Syntax Axioms, which means no
 parameter "transformations".</div>
</td>
</tr>
<tr class="altColor">
<td class="colOne"><code><strong><a href="../../mmj/verify/NullsPermittedRule.html#NullsPermittedRule(mmj.verify.Grammar, mmj.verify.GrammarRule, int, mmj.verify.NullsPermittedRule)">NullsPermittedRule</a></strong>(<a href="../../mmj/verify/Grammar.html" title="class in mmj.verify">Grammar</a>&nbsp;grammar,
                  <a href="../../mmj/verify/GrammarRule.html" title="class in mmj.verify">GrammarRule</a>&nbsp;oldGrammarRule,
                  int&nbsp;matchIndex,
                  <a href="../../mmj/verify/NullsPermittedRule.html" title="class in mmj.verify">NullsPermittedRule</a>&nbsp;nullsPermittedRule)</code>
<div class="block">Build new NullsPermittedRule using an existing GrammarRule which is being
 "cloned" and modified by substituting the paramTransformationTree from a
 NullsPermittedRule for one of the existing rule's variable hypothesis
 paramTransformationTree nodes.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../mmj/verify/NullsPermittedRule.html#addToGrammar(mmj.verify.Grammar, mmj.lang.Cnst[])">addToGrammar</a></strong>(<a href="../../mmj/verify/Grammar.html" title="class in mmj.verify">Grammar</a>&nbsp;grammar,
            <a href="../../mmj/lang/Cnst.html" title="class in mmj.lang">Cnst</a>[]&nbsp;ruleFormatExprIn)</code>
<div class="block">Add Nulls Permitted rule format expression to the system "repository".</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="../../mmj/verify/NullsPermittedRule.html" title="class in mmj.verify">NullsPermittedRule</a></code></td>
<td class="colLast"><code><strong><a href="../../mmj/verify/NullsPermittedRule.html#buildBaseRule(mmj.verify.Grammar, mmj.lang.Axiom)">buildBaseRule</a></strong>(<a href="../../mmj/verify/Grammar.html" title="class in mmj.verify">Grammar</a>&nbsp;grammar,
             <a href="../../mmj/lang/Axiom.html" title="class in mmj.lang">Axiom</a>&nbsp;baseSyntaxAxiom)</code>
<div class="block">Nulls Permitted Rule builder for base Syntax Axioms, which means no
 parameter "transformations".</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../mmj/verify/NullsPermittedRule.html#deriveAdditionalRules(mmj.verify.Grammar)">deriveAdditionalRules</a></strong>(<a href="../../mmj/verify/Grammar.html" title="class in mmj.verify">Grammar</a>&nbsp;grammar)</code>
<div class="block">deriveAdditionalRules based on the addition of a new GrammarRule to those
 already generated and accepted.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="../../mmj/verify/GrammarRule.html" title="class in mmj.verify">GrammarRule</a></code></td>
<td class="colLast"><code><strong><a href="../../mmj/verify/NullsPermittedRule.html#getDupRule(mmj.verify.Grammar, mmj.lang.Cnst[])">getDupRule</a></strong>(<a href="../../mmj/verify/Grammar.html" title="class in mmj.verify">Grammar</a>&nbsp;grammar,
          <a href="../../mmj/lang/Cnst.html" title="class in mmj.lang">Cnst</a>[]&nbsp;ruleFormatExprIn)</code>
<div class="block">Return a duplicate of the input ruleFormatExpr if it exists, or return
 null.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../mmj/lang/Cnst.html" title="class in mmj.lang">Cnst</a>[]</code></td>
<td class="colLast"><code><strong><a href="../../mmj/verify/NullsPermittedRule.html#getForestRuleExpr()">getForestRuleExpr</a></strong>()</code>
<div class="block">Returns the ruleFormatExpr for the Nulls Permitted Rule, simulating
 retrieving it from the Grammar Rule Tree/Forest.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_mmj.verify.GrammarRule">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;mmj.verify.<a href="../../mmj/verify/GrammarRule.html" title="class in mmj.verify">GrammarRule</a></h3>
<code><a href="../../mmj/verify/GrammarRule.html#add(mmj.lang.Axiom, mmj.verify.Grammar)">add</a>, <a href="../../mmj/verify/GrammarRule.html#buildGrammaticalParseNode(mmj.lang.ParseNodeHolder[])">buildGrammaticalParseNode</a>, <a href="../../mmj/verify/GrammarRule.html#buildRuleFormatExpr()">buildRuleFormatExpr</a>, <a href="../../mmj/verify/GrammarRule.html#compareTo(java.lang.Object)">compareTo</a>, <a href="../../mmj/verify/GrammarRule.html#equals(java.lang.Object)">equals</a>, <a href="../../mmj/verify/GrammarRule.html#findMatchingVarHypTyp(int, mmj.lang.Cnst)">findMatchingVarHypTyp</a>, <a href="../../mmj/verify/GrammarRule.html#getBaseSyntaxAxiom()">getBaseSyntaxAxiom</a>, <a href="../../mmj/verify/GrammarRule.html#getGrammarRuleTyp()">getGrammarRuleTyp</a>, <a href="../../mmj/verify/GrammarRule.html#getIsBaseRule()">getIsBaseRule</a>, <a href="../../mmj/verify/GrammarRule.html#getMaxSeqNbr()">getMaxSeqNbr</a>, <a href="../../mmj/verify/GrammarRule.html#getNbrHypParamsUsed()">getNbrHypParamsUsed</a>, <a href="../../mmj/verify/GrammarRule.html#getParamTransformationTree()">getParamTransformationTree</a>, <a href="../../mmj/verify/GrammarRule.html#getParamVarHypNode()">getParamVarHypNode</a>, <a href="../../mmj/verify/GrammarRule.html#getParseNodeHolderExpr()">getParseNodeHolderExpr</a>, <a href="../../mmj/verify/GrammarRule.html#getRuleFormatExpr()">getRuleFormatExpr</a>, <a href="../../mmj/verify/GrammarRule.html#getRuleFormatExprAsString()">getRuleFormatExprAsString</a>, <a href="../../mmj/verify/GrammarRule.html#getRuleFormatExprFirst()">getRuleFormatExprFirst</a>, <a href="../../mmj/verify/GrammarRule.html#getRuleFormatExprIthSymbol(int)">getRuleFormatExprIthSymbol</a>, <a href="../../mmj/verify/GrammarRule.html#getRuleHypPos()">getRuleHypPos</a>, <a href="../../mmj/verify/GrammarRule.html#getRuleNbr()">getRuleNbr</a>, <a href="../../mmj/verify/GrammarRule.html#getSyntaxAxiomVarHypReseq()">getSyntaxAxiomVarHypReseq</a>, <a href="../../mmj/verify/GrammarRule.html#hashCode()">hashCode</a>, <a href="../../mmj/verify/GrammarRule.html#setIsBaseRule(boolean)">setIsBaseRule</a>, <a href="../../mmj/verify/GrammarRule.html#setMaxSeqNbr(int)">setMaxSeqNbr</a>, <a href="../../mmj/verify/GrammarRule.html#setNbrHypParamsUsed(int)">setNbrHypParamsUsed</a>, <a href="../../mmj/verify/GrammarRule.html#setRuleFormatExpr(mmj.lang.Cnst[])">setRuleFormatExpr</a>, <a href="../../mmj/verify/GrammarRule.html#showRuleFormatExprAsString(mmj.lang.Cnst[])">showRuleFormatExprAsString</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_detail">
<!--   -->
</a>
<h3>Constructor Detail</h3>
<a name="NullsPermittedRule()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>NullsPermittedRule</h4>
<pre>public&nbsp;NullsPermittedRule()</pre>
<div class="block">Default constructor.</div>
</li>
</ul>
<a name="NullsPermittedRule(mmj.verify.Grammar, mmj.lang.Axiom)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>NullsPermittedRule</h4>
<pre>public&nbsp;NullsPermittedRule(<a href="../../mmj/verify/Grammar.html" title="class in mmj.verify">Grammar</a>&nbsp;grammar,
                  <a href="../../mmj/lang/Axiom.html" title="class in mmj.lang">Axiom</a>&nbsp;baseSyntaxAxiom)</pre>
<div class="block">Constructor -- default GrammarRule for base Syntax Axioms, which means no
 parameter "transformations".</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>grammar</code> - The Grammar.</dd><dd><code>baseSyntaxAxiom</code> - Syntax Axiom.</dd></dl>
</li>
</ul>
<a name="NullsPermittedRule(mmj.verify.Grammar, mmj.verify.GrammarRule, int, mmj.verify.NullsPermittedRule)">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>NullsPermittedRule</h4>
<pre>public&nbsp;NullsPermittedRule(<a href="../../mmj/verify/Grammar.html" title="class in mmj.verify">Grammar</a>&nbsp;grammar,
                  <a href="../../mmj/verify/GrammarRule.html" title="class in mmj.verify">GrammarRule</a>&nbsp;oldGrammarRule,
                  int&nbsp;matchIndex,
                  <a href="../../mmj/verify/NullsPermittedRule.html" title="class in mmj.verify">NullsPermittedRule</a>&nbsp;nullsPermittedRule)</pre>
<div class="block">Build new NullsPermittedRule using an existing GrammarRule which is being
 "cloned" and modified by substituting the paramTransformationTree from a
 NullsPermittedRule for one of the existing rule's variable hypothesis
 paramTransformationTree nodes.
 <p>
 Note that the output paramTransformationTree is built using a deep clone
 of the existing rules paramTransformationTree but the substituting tree
 does not need cloning BECAUSE when the GrammaticalParser builds a
 ParseTree for an expression, *it* does a full cloning operation; this, of
 course assumes that once a GrammarRule is created and fully populated
 that it is never modified (changing the grammar means rebuilding it, in
 other words.)
 <p>
 Example, a TypeConversionRule is morphed into a NullsPermittedRule by
 substituting the NullsPermitted paramTransformationTree for the
 TypeConversionRule's variable hypothesis.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>grammar</code> - The Grammar.</dd><dd><code>oldGrammarRule</code> - rule being "cloned".</dd><dd><code>matchIndex</code> - index to paramVarHypNode array indicating which VarHyp
            is being substituted.</dd><dd><code>nullsPermittedRule</code> - the modifying rule.</dd></dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="buildBaseRule(mmj.verify.Grammar, mmj.lang.Axiom)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>buildBaseRule</h4>
<pre>public static&nbsp;<a href="../../mmj/verify/NullsPermittedRule.html" title="class in mmj.verify">NullsPermittedRule</a>&nbsp;buildBaseRule(<a href="../../mmj/verify/Grammar.html" title="class in mmj.verify">Grammar</a>&nbsp;grammar,
                               <a href="../../mmj/lang/Axiom.html" title="class in mmj.lang">Axiom</a>&nbsp;baseSyntaxAxiom)</pre>
<div class="block">Nulls Permitted Rule builder for base Syntax Axioms, which means no
 parameter "transformations".</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>grammar</code> - The Grammar.</dd><dd><code>baseSyntaxAxiom</code> - Syntax Axiom.</dd>
<dt><span class="strong">Returns:</span></dt><dd>new NullsPermittedRule object.</dd></dl>
</li>
</ul>
<a name="getDupRule(mmj.verify.Grammar, mmj.lang.Cnst[])">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDupRule</h4>
<pre>public&nbsp;<a href="../../mmj/verify/GrammarRule.html" title="class in mmj.verify">GrammarRule</a>&nbsp;getDupRule(<a href="../../mmj/verify/Grammar.html" title="class in mmj.verify">Grammar</a>&nbsp;grammar,
                     <a href="../../mmj/lang/Cnst.html" title="class in mmj.lang">Cnst</a>[]&nbsp;ruleFormatExprIn)</pre>
<div class="block">Return a duplicate of the input ruleFormatExpr if it exists, or return
 null.</div>
<dl>
<dt><strong>Specified by:</strong></dt>
<dd><code><a href="../../mmj/verify/GrammarRule.html#getDupRule(mmj.verify.Grammar, mmj.lang.Cnst[])">getDupRule</a></code>&nbsp;in class&nbsp;<code><a href="../../mmj/verify/GrammarRule.html" title="class in mmj.verify">GrammarRule</a></code></dd>
<dt><span class="strong">Parameters:</span></dt><dd><code>grammar</code> - The Grammar.</dd><dd><code>ruleFormatExprIn</code> - the expression to check.</dd>
<dt><span class="strong">Returns:</span></dt><dd>GrammarRule if duplicate found, or null.</dd></dl>
</li>
</ul>
<a name="addToGrammar(mmj.verify.Grammar, mmj.lang.Cnst[])">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addToGrammar</h4>
<pre>public&nbsp;void&nbsp;addToGrammar(<a href="../../mmj/verify/Grammar.html" title="class in mmj.verify">Grammar</a>&nbsp;grammar,
                <a href="../../mmj/lang/Cnst.html" title="class in mmj.lang">Cnst</a>[]&nbsp;ruleFormatExprIn)</pre>
<div class="block">Add Nulls Permitted rule format expression to the system "repository".</div>
<dl>
<dt><strong>Specified by:</strong></dt>
<dd><code><a href="../../mmj/verify/GrammarRule.html#addToGrammar(mmj.verify.Grammar, mmj.lang.Cnst[])">addToGrammar</a></code>&nbsp;in class&nbsp;<code><a href="../../mmj/verify/GrammarRule.html" title="class in mmj.verify">GrammarRule</a></code></dd>
<dt><span class="strong">Parameters:</span></dt><dd><code>grammar</code> - The Grammar object (Mr Big).</dd><dd><code>ruleFormatExprIn</code> - the expression to add.</dd></dl>
</li>
</ul>
<a name="deriveAdditionalRules(mmj.verify.Grammar)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>deriveAdditionalRules</h4>
<pre>public&nbsp;void&nbsp;deriveAdditionalRules(<a href="../../mmj/verify/Grammar.html" title="class in mmj.verify">Grammar</a>&nbsp;grammar)</pre>
<div class="block">deriveAdditionalRules based on the addition of a new GrammarRule to those
 already generated and accepted.
 <p>
 A PriorityQueue is used to store new derivedGrammarRules awaiting
 processing (dup checking, parse checking and possible addition to the
 Grammar data.) The Comparator orders derived rules based on MaxSeqNbr and
 ruleNbr so that low Metamath sequence number statements are added to the
 Grammar before higher sequenced statements. The existing rules are stored
 in separate repositories, which are scanned, as needed, when a new rule
 is added; the order that the repositories are scanned is irrelevant
 because the PriorityQueue controls update processing sequence.
 <p>
 Note also that a newly derived rule may generate other derived rules,
 which in turn trigger other derivations; this is a "feature" (as well as
 a scary opportunity for an infinite loop!) The benefit is that each pair
 of rules may be considered separately; when processing the pair there is
 no need to worry about other possible Type Conversion and Null Permitted
 Rules. For example, an "A" Type hypothesis in a Notation Rule may be the
 target of a "B to A" Type Conversion, but the fact that there is a
 "C to B" or "C to A" conversion can be ignored -- if the "B to A"
 conversion generates a variant rule of the original rule, then when
 *that* rule comes back through the PriorityQueue, the "C to B" rule will
 automatically come into play. This also means that a "B to A" conversion
 will combine with a "C to B" conversion to generate a "C to A" conversion
 -- eventually.
 <p>
 NullsPermittedRule.deriveAdditionalRules -- The new NullsPermittedRule
 may generate variants of of NullsPermittedRules, TypeConversionRules and
 NotationRules. A NullsPermittedRule can be substituted *into* any
 matching hypothesis, and the resulting GrammarRule can morph!</div>
<dl>
<dt><strong>Specified by:</strong></dt>
<dd><code><a href="../../mmj/verify/GrammarRule.html#deriveAdditionalRules(mmj.verify.Grammar)">deriveAdditionalRules</a></code>&nbsp;in class&nbsp;<code><a href="../../mmj/verify/GrammarRule.html" title="class in mmj.verify">GrammarRule</a></code></dd>
<dt><span class="strong">Parameters:</span></dt><dd><code>grammar</code> - The Grammar.</dd></dl>
</li>
</ul>
<a name="getForestRuleExpr()">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getForestRuleExpr</h4>
<pre>public&nbsp;<a href="../../mmj/lang/Cnst.html" title="class in mmj.lang">Cnst</a>[]&nbsp;getForestRuleExpr()</pre>
<div class="block">Returns the ruleFormatExpr for the Nulls Permitted Rule, simulating
 retrieving it from the Grammar Rule Tree/Forest.
 <p>
 In reality, the ruleFormatExpr for a Nulls Permitted Rule is an
 zero-length sequence of symbol...</div>
<dl>
<dt><strong>Specified by:</strong></dt>
<dd><code><a href="../../mmj/verify/GrammarRule.html#getForestRuleExpr()">getForestRuleExpr</a></code>&nbsp;in class&nbsp;<code><a href="../../mmj/verify/GrammarRule.html" title="class in mmj.verify">GrammarRule</a></code></dd>
<dt><span class="strong">Returns:</span></dt><dd>ruleFormatExpr for the Nulls Permitted Rule.</dd></dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!--   -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../mmj/verify/NotationRule.html" title="class in mmj.verify"><span class="strong">Prev Class</span></a></li>
<li><a href="../../mmj/verify/ProofConstants.html" title="class in mmj.verify"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?mmj/verify/NullsPermittedRule.html" target="_top">Frames</a></li>
<li><a href="NullsPermittedRule.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#fields_inherited_from_class_mmj.verify.GrammarRule">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
